package leetCode;

import java.util.*;

/**
 * leet code3
 * 第三题
 * @author 86155
 * @date 2023/12/11
 */
public class LeetCode3 {
    public static void main(String[] args) {
        longestConsecutive(new int[]{0});
    }

    public static int longestConsecutive(int[] nums) {
//        //去重
//        HashSet<Integer> set = new HashSet<>();
//        for (int i :
//                nums) {
//            set.add(i);
//        }
//        //排序
//        List<Integer> collect = set.stream().collect(Collectors.toList());
//        collect.stream().sorted();
//        //查找 差值为一
//        int count = 1;
//        ArrayList<Integer> all = new ArrayList<>();
//        all.add(0);
//        for (int i = 0; i < nums.length-1; i++) {
//            if (i != nums.length -2){
//                if (nums[i + 1] - nums[i] == 1 ) {
//                    count++;
//                } else{
//                    all.add(count);
//                    count = 1;
//                }
//            }else if (nums[i + 1] - nums[i] == 1 ) {
//                count++;
//                all.add(count);
//            }
//
//        }
//        //取最大
//        //System.out.println(Collections.max(all));
//
//        Integer integer = all.stream().max(Comparator.comparing(Integer::intValue)).get();
//        return integer;
        /*先将所有数字放入hashet中。
        遍历nums，如果set中存在nums[i]-1，则表示这个元素不是开始元素，所以不会是最长的连续子序列起点，跳过。
        对于没有nums[i]-1的元素，则表示为起点，开始循环，每次+1，判断是否在set中，并维护变量记录最大值。

      */
        HashSet<Integer> set = new HashSet<>();
        for (int n : nums) {
            set.add(n);
        }
        int res = 0;
        for (int num :
                set) {
            if (!set.contains(num - 1)) {
                //是开始元素
                int start = num;
                //多少个连续值
                int series = 1;
                while (set.contains(start + 1)) {
                    start++;
                    series++;
                }
                res = Math.max(res, series);
            }
        }
        return res;

    }
}
